home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / wormhole / wormit3.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-14  |  7.4 KB  |  324 lines

  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include<dos.h>
  5. #include"pic1.c"
  6. #include"pic2.c"
  7.  
  8. #define         DELAY           0
  9.  
  10. char far *p;
  11.  
  12. //this is the picture being "wormed" in rgb components
  13. //It's also upside down.  I never quite got around to fixing that.
  14.  
  15. int red[225]={
  16. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  17. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  18. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  19. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  20. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  21. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  22. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  23. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  24. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  25. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  26. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  27. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  28. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  29. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  30. 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
  31. };
  32.  
  33. int green[225]={
  34. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  35. 0,63,0,63,0,0,0,63,0,63,63,63,0,0,0,
  36. 0,63,0,63,0,0,0,63,0,63,0,0,63,0,0,
  37. 0,63,0,63,0,0,63,63,0,63,0,0,0,63,0,
  38. 0,63,0,63,0,0,63,63,0,63,0,0,0,63,0,
  39. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  40. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  41. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  42. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  43. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  44. 0,63,0,63,63,0,0,63,0,63,0,0,0,63,0,
  45. 0,63,0,63,63,0,0,63,0,63,0,0,0,63,0,
  46. 0,63,0,63,0,0,0,63,0,63,0,0,63,0,0,
  47. 0,63,0,63,0,0,0,63,0,63,63,63,0,0,0,
  48. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  49. };
  50.  
  51. int blue[225]={
  52. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  53. 0,63,0,63,0,0,0,63,0,63,63,63,0,0,0,
  54. 0,63,0,63,0,0,0,63,0,63,0,0,63,0,0,
  55. 0,63,0,63,0,0,63,63,0,63,0,0,0,63,0,
  56. 0,63,0,63,0,0,63,63,0,63,0,0,0,63,0,
  57. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  58. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  59. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  60. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  61. 0,63,0,63,0,63,0,63,0,63,0,0,0,63,0,
  62. 0,63,0,63,63,0,0,63,0,63,0,0,0,63,0,
  63. 0,63,0,63,63,0,0,63,0,63,0,0,0,63,0,
  64. 0,63,0,63,0,0,0,63,0,63,0,0,63,0,0,
  65. 0,63,0,63,0,0,0,63,0,63,63,63,0,0,0,
  66. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  67. };
  68.  
  69. //below: storage for transformation
  70.  
  71. int reg[15];
  72.  
  73. //grfx routines
  74.  
  75. void initgr256(void)     //Tested
  76. {
  77. asm{
  78.     mov ah,00h
  79.     mov al,13h
  80.     int 10h
  81.    }
  82.    p=(char *)MK_FP(0xa000,0);
  83. }
  84. void deinit(void)       //Tested
  85. {
  86. asm{
  87.     mov ah,00h
  88.     mov al,03h
  89.     int 10h
  90.    }
  91. }
  92.  
  93. void setpalcol(short int color, short int red, short int green, short int blue)
  94. {
  95. asm {
  96.     mov dx,03c8h
  97.     mov ax,color
  98.     out dx,al
  99.     inc dx
  100.     mov ax,red
  101.     out dx,al
  102.     mov ax,green
  103.     out dx,al
  104.     mov ax,blue
  105.     out dx,al
  106.     };
  107. }
  108. void plot(int x,int y,int color)
  109. {
  110. p[x+320*y]=color;
  111. }
  112.  
  113. void waitfor(void)
  114. {
  115. asm MOV     DX,3DAh;
  116. Wait: asm   IN      AL,DX
  117. asm TEST    AL,08h
  118. asm JZ      Wait
  119. Retr: asm   IN      AL,DX
  120. asm         TEST    AL,08h
  121. asm         JNZ     Retr
  122. }
  123.  
  124. void setpal(void)
  125.     {
  126.     int k;
  127.     waitfor();
  128.     for(k=0;k<225;k++)
  129.         setpalcol(k+1,red[k],green[k],blue[k]);
  130.     }
  131.  
  132. //puts wormhol6.c's pic on screen
  133.  
  134. void initscrn(void)
  135.     {
  136.     int i,j;
  137.     for(i=0;i<319;i++)
  138.         for(j=0;j<100;j++)
  139.             {
  140.             plot(i,j+100,pic2[(319*j+i)]);
  141.             plot(i,j,pic1[(319*j+i)]);
  142.             }
  143.     }
  144.  
  145. //Up down left and right shifting routines.
  146. //One has a bug that I haven't fixed yet.
  147.  
  148. void shiftup(void)
  149.     {
  150.     int k;
  151.     for(k=0;k<15;k++)
  152.         reg[k]=red[k];
  153.     for(k=15;k<225;k++)
  154.         red[k-15]=red[k];
  155.     for(k=0;k<15;k++)
  156.         red[k+210]=reg[k];
  157.     for(k=0;k<15;k++)
  158.         reg[k]=green[k];
  159.     for(k=15;k<225;k++)
  160.         green[k-15]=green[k];
  161.     for(k=0;k<15;k++)
  162.         green[k+210]=reg[k];
  163.     for(k=0;k<15;k++)
  164.         reg[k]=blue[k];
  165.     for(k=15;k<225;k++)
  166.         blue[k-15]=blue[k];
  167.     for(k=0;k<15;k++)
  168.         blue[k+210]=reg[k];
  169.     delay(DELAY);
  170.     }
  171.  
  172. void shiftdown(void)
  173.     {
  174.     int k;
  175.     for(k=0;k<15;k++)
  176.         reg[k]=red[k+210];
  177.     for(k=209;k>=0;k--)
  178.         red[k+15]=red[k];
  179.     for(k=0;k<15;k++)
  180.         red[k]=reg[k];
  181.     for(k=0;k<15;k++)
  182.         reg[k]=green[k+210];
  183.     for(k=209;k>=0;k--)
  184.         green[k+15]=green[k];
  185.     for(k=0;k<15;k++)
  186.         green[k]=reg[k];
  187.     for(k=0;k<15;k++)
  188.         reg[k]=blue[k+210];
  189.     for(k=209;k>=0;k--)
  190.         blue[k+15]=blue[k];
  191.     for(k=0;k<15;k++)
  192.         blue[k]=reg[k];
  193.     delay(DELAY);
  194.     }
  195.  
  196. void shiftright(void)
  197.     {
  198.     int k;
  199.     for(k=0;k<15;k++)
  200.         {
  201.         reg[k]=red[15*k+14];
  202.         red[15*k+14]=red[15*k+13];
  203.         red[15*k+13]=red[15*k+12];
  204.         red[15*k+12]=red[15*k+11];
  205.         red[15*k+11]=red[15*k+10];
  206.         red[15*k+10]=red[15*k+9];
  207.         red[15*k+9]=red[15*k+8];
  208.         red[15*k+8]=red[15*k+7];
  209.         red[15*k+7]=red[15*k+6];
  210.         red[15*k+6]=red[15*k+5];
  211.         red[15*k+5]=red[15*k+4];
  212.         red[15*k+4]=red[15*k+3];
  213.         red[15*k+3]=red[15*k+2];
  214.         red[15*k+2]=red[15*k+1];
  215.         red[15*k+1]=red[15*k];
  216.         red[15*k]=reg[k];
  217.         reg[k]=green[15*k+14];
  218.         green[15*k+14]=green[15*k+13];
  219.         green[15*k+13]=green[15*k+12];
  220.         green[15*k+12]=green[15*k+11];
  221.         green[15*k+11]=green[15*k+10];
  222.         green[15*k+10]=green[15*k+9];
  223.         green[15*k+9]=green[15*k+8];
  224.         green[15*k+8]=green[15*k+7];
  225.         green[15*k+7]=green[15*k+6];
  226.         green[15*k+6]=green[15*k+5];
  227.         green[15*k+5]=green[15*k+4];
  228.         green[15*k+4]=green[15*k+3];
  229.         green[15*k+3]=green[15*k+2];
  230.         green[15*k+2]=green[15*k+1];
  231.         green[15*k+1]=green[15*k];
  232.         green[15*k]=reg[k];
  233.         reg[k]=blue[15*k+14];
  234.         blue[15*k+14]=blue[15*k+13];
  235.         blue[15*k+13]=blue[15*k+12];
  236.         blue[15*k+12]=blue[15*k+11];
  237.         blue[15*k+11]=blue[15*k+10];
  238.         blue[15*k+10]=blue[15*k+9];
  239.         blue[15*k+9]=blue[15*k+8];
  240.         blue[15*k+8]=blue[15*k+7];
  241.         blue[15*k+7]=blue[15*k+6];
  242.         blue[15*k+6]=blue[15*k+5];
  243.         blue[15*k+5]=blue[15*k+4];
  244.         blue[15*k+4]=blue[15*k+3];
  245.         blue[15*k+3]=blue[15*k+2];
  246.         blue[15*k+2]=blue[15*k+1];
  247.         blue[15*k+1]=blue[15*k];
  248.         blue[15*k]=reg[k];
  249.         }
  250.     delay(DELAY);
  251.     }
  252.  
  253. void shiftleft(void)
  254.     {
  255.     int k;
  256.     for(k=0;k<15;k++)
  257.         {
  258.         reg[k]=red[15*k];
  259.         red[15*k]=red[15*k+1];
  260.         red[15*k+1]=red[15*k+2];
  261.         red[15*k+2]=red[15*k+3];
  262.         red[15*k+3]=red[15*k+4];
  263.         red[15*k+4]=red[15*k+5];
  264.         red[15*k+5]=red[15*k+6];
  265.         red[15*k+6]=red[15*k+7];
  266.         red[15*k+7]=red[15*k+8];
  267.         red[15*k+8]=red[15*k+9];
  268.         red[15*k+9]=red[15*k+10];
  269.         red[15*k+10]=red[15*k+11];
  270.         red[15*k+11]=red[15*k+12];
  271.         red[15*k+12]=red[15*k+13];
  272.         red[15*k+13]=red[15*k+14];
  273.         red[15*k+14]=reg[k];
  274.         reg[k]=green[15*k];
  275.         green[15*k]=green[15*k+1];
  276.         green[15*k+1]=green[15*k+2];
  277.         green[15*k+2]=green[15*k+3];
  278.         green[15*k+3]=green[15*k+4];
  279.         green[15*k+4]=green[15*k+5];
  280.         green[15*k+5]=green[15*k+6];
  281.         green[15*k+6]=green[15*k+7];
  282.         green[15*k+7]=green[15*k+8];
  283.         green[15*k+8]=green[15*k+9];
  284.         green[15*k+9]=green[15*k+10];
  285.         green[15*k+10]=green[15*k+11];
  286.         green[15*k+11]=green[15*k+12];
  287.         green[15*k+12]=green[15*k+13];
  288.         green[15*k+13]=green[15*k+14];
  289.         green[15*k+14]=reg[k];
  290.         reg[k]=blue[15*k];
  291.         blue[15*k]=blue[15*k+1];
  292.         blue[15*k+1]=blue[15*k+2];
  293.         blue[15*k+2]=blue[15*k+3];
  294.         blue[15*k+3]=blue[15*k+4];
  295.         blue[15*k+4]=blue[15*k+5];
  296.         blue[15*k+5]=blue[15*k+6];
  297.         blue[15*k+6]=blue[15*k+7];
  298.         blue[15*k+7]=blue[15*k+8];
  299.         blue[15*k+8]=blue[15*k+9];
  300.         blue[15*k+9]=blue[15*k+10];
  301.         blue[15*k+10]=blue[15*k+11];
  302.         blue[15*k+11]=blue[15*k+12];
  303.         blue[15*k+12]=blue[15*k+13];
  304.         blue[15*k+13]=blue[15*k+14];
  305.         blue[15*k+14]=reg[k];
  306.         }
  307.     delay(DELAY);
  308.     }
  309.  
  310. void main(void)
  311.     {
  312.     int k;
  313.     initgr256();
  314.     setpal();
  315.     initscrn();
  316.     while(kbhit()==0)
  317.         {
  318.         shiftup();               //You could change these
  319.         shiftright();            //to any combo you want
  320.         setpal();                //Just setpal() each time
  321.         }                        //you want to reset the pattern
  322.     deinit();
  323.     }
  324.